#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTableWidget>
#include "../../Hopfield.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

/*
//PATTERNS DE BASE
int zero[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1}};
int un[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1}};
int deux[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,1,1,1,1,1,1,1,1}};
int trois[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1}};
int quatre[LARGEUR][HAUTEUR] = {{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1}};
int cinq[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1}};
int six[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1}};
int sept[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1}};
int huit[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1}};
int neuf[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{1,1,1,1,1,1,1,1,1}};
*/

    
//PATTERNS DIFFERENT
int zero[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,1,1,1,1,1,1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,1,1,1,1,1,1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
int un[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
int deux[LARGEUR][HAUTEUR] = {{-1,1,1,1,1,1,1,1,-1},{-1,-1,-1,-1,-1,-1,-1,1,-1},{-1,-1,-1,-1,-1,-1,-1,1,-1},{-1,1,1,1,1,1,1,1,-1},{-1,1,-1,-1,-1,-1,-1,-1,-1},{-1,1,-1,-1,-1,-1,-1,-1,-1},{-1,1,1,1,1,1,1,1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
int trois[LARGEUR][HAUTEUR] = {{-1,1,1,1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,1,1,1,1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,-1,-1,-1,-1,-1,-1,-1,1},{-1,1,1,1,1,1,1,1,1}};
int quatre[LARGEUR][HAUTEUR] ={{-1,1,-1,-1,-1,-1,-1,-1,-1},{-1,1,-1,-1,-1,-1,-1,-1,-1},{-1,1,-1,-1,-1,1,-1,-1,-1},{-1,1,-1,-1,-1,1,-1,-1,-1},{-1,1,1,1,1,1,1,1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1}} ;
int cinq[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,-1,-1,-1,-1,-1,-1,-1,-1},{1,1,1,1,1,1,1,1,-1},{-1,-1,-1,-1,-1,-1,-1,1,-1},{-1,-1,-1,-1,-1,-1,-1,1,-1},{-1,-1,-1,-1,-1,-1,-1,1,-1},{1,1,1,1,1,1,1,1,-1}};
int six[LARGEUR][HAUTEUR] = {{-1,1,1,1,1,1,1,1,1},{-1,1,-1,-1,-1,-1,-1,-1,-1},{-1,1,-1,-1,-1,-1,-1,-1,-1},{-1,1,-1,-1,-1,-1,-1,-1,-1},{-1,1,1,1,1,1,1,1,1},{-1,1,-1,-1,-1,-1,-1,-1,1},{-1,1,-1,-1,-1,-1,-1,-1,1},{-1,1,-1,-1,-1,-1,-1,-1,1},{-1,1,1,1,1,1,1,1,1}};
int sept[LARGEUR][HAUTEUR] = {{-1,1,1,1,1,1,1,1,-1},{-1,-1,-1,-1,-1,-1,-1,1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1}};
int huit[LARGEUR][HAUTEUR] = {{-1,1,1,1,1,1,1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,1,1,1,1,1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,-1,-1,-1,-1,-1,1,-1},{-1,1,1,1,1,1,1,1,-1}};
int neuf[LARGEUR][HAUTEUR] = {{1,1,1,1,1,1,1,-1,-1},{1,-1,-1,-1,-1,-1,1,-1,-1},{1,-1,-1,-1,-1,-1,1,-1,-1},{1,-1,-1,-1,-1,-1,1,-1,-1},{1,1,1,1,1,1,1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{1,1,1,1,1,1,1,-1,-1}};
    
/*
// PATTERNS DU SUJET
 int zero[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int un[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,1,1,-1,-1,-1,-1},{-1,-1,1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,1,1,1,1,1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int deux[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,-1,-1,-1},{-1,-1,1,1,1,1,1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int trois[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,-1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int quatre[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,1,1,-1,-1,-1},{-1,-1,-1,1,-1,1,-1,-1,-1},{-1,-1,1,-1,-1,1,-1,-1,-1},{-1,-1,1,1,1,1,1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int cinq[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,1,1,1,1,1,-1,-1},{-1,-1,1,-1,-1,-1,-1,-1,-1},{-1,-1,1,1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int six[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,-1,-1,-1},{-1,-1,1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int sept[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,1,1,1,1,1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,-1,-1,-1,1,-1,-1,-1},{-1,-1,-1,-1,1,-1,-1,-1,-1},{-1,-1,-1,1,-1,-1,-1,-1,-1},{-1,-1,-1,1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int huit[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
 int neuf[LARGEUR][HAUTEUR] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,1,-1,-1},{-1,-1,-1,-1,-1,-1,1,-1,-1},{-1,-1,-1,1,1,1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};
*/
    
//Neurones temporaires pour modification manuelles
int neuronesTable[LARGEUR][HAUTEUR]={{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1,-1}};

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void initialisation();
    void showCellEnter(int x, int y, QTableWidget *table, int value);
    void printCharacter(int caractere[LARGEUR][HAUTEUR], QTableWidget *table);
    void printCurrentCharacter(QTableWidget *table);
    void printEnterCharacter(QTableWidget *table);
    void megaApprentissage();
    void calculErreurs();
    float calculErreurCaractere(int caractere[LARGEUR][HAUTEUR]);

public slots:
    void launch();
    void changeCellValue(int x, int y);
    void clear();
    void toZero();
    void toOne();
    void toTwo();
    void toThree();
    void toFour();
    void toFive();
    void toSix();
    void toSeven();
    void toHuit();
    void toNine();
    void printCharacterToMatrice();

private:
    Ui::MainWindow *ui;
    Hopfield reseau;
};

#endif // MAINWINDOW_H
